package com.reservation.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.reservation.entity.ArtCollection;

import java.util.List;

/**
 * 藏品服务接口
 */
public interface CollectionService {
    
    /**
     * 添加藏品
     *
     * @param artCollection 藏品信息
     * @return 添加成功的藏品信息
     */
    ArtCollection addCollection(ArtCollection artCollection);
    
    /**
     * 修改藏品信息
     *
     * @param artCollection 藏品信息
     * @return 修改后的藏品信息
     */
    ArtCollection updateCollection(ArtCollection artCollection);
    
    /**
     * 获取藏品详情
     *
     * @param id 藏品ID
     * @return 藏品信息
     */
    ArtCollection getCollectionById(Long id);
    
    /**
     * 删除藏品
     *
     * @param id 藏品ID
     * @return 是否成功
     */
    boolean deleteCollection(Long id);
    
    /**
     * 分页查询藏品列表
     *
     * @param page 分页参数
     * @param name 藏品名称（可选）
     * @param type 藏品类型（可选）
     * @param exhibitionId  所属展馆ID（可选）
     * @return 藏品列表
     */
    IPage<ArtCollection> getCollectionList(Page<ArtCollection> page, String name, String type, Integer exhibitionId);
    
    /**
     * 获取所有藏品
     *
     * @return 藏品列表
     */
    List<ArtCollection> getAllCollections();
    
    /**
     * 根据类型获取藏品
     *
     * @param type 藏品类型
     * @return 藏品列表
     */
    List<ArtCollection> getCollectionsByType(String type);
    
    /**
     * 根据年代获取藏品
     *
     * @param era 藏品年代
     * @return 藏品列表
     */
    List<ArtCollection> getCollectionsByEra(String era);
    
    /**
     * 获取展览中的藏品
     *
     * @param exhibitionId 展览ID
     * @return 藏品列表
     */
    List<ArtCollection> getCollectionsByExhibition(Long exhibitionId);
    
    /**
     * 添加藏品到展览
     *
     * @param exhibitionId 展览ID
     * @param collectionId 藏品ID
     * @return 是否成功
     */
    boolean addCollectionToExhibition(Long exhibitionId, Long collectionId);
    
    /**
     * 从展览中移除藏品
     *
     * @param exhibitionId 展览ID
     * @param collectionId 藏品ID
     * @return 是否成功
     */
    boolean removeCollectionFromExhibition(Long exhibitionId, Long collectionId);
}